package main

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"time"

	"github.com/sirupsen/logrus"
)

// 存储算式信息
type Exercise struct {
	num1  int    // 第一个数
	num2  int    // 第二个数
	op    string // 运算符（+或-）
	answer int   // 答案
}

func main() {
	rand.Seed(time.Now().UnixNano()) // 初始化随机数种子
	logrus.Info("-------加减法口算练习系统-v0.2（50道）-----")
	logrus.Info("规则：加法和≤100，减法差≥0（无负数）\n")

	scanner := bufio.NewScanner(os.Stdin) // 用于读取用户输入
	correctCount := 0                     // 记录正确题数

	// 生成并答题50道
	for i := 0; i < 50; i++ {
		// 生成一道合法的算式
		ex := generateValidExercise()

		// 显示题目，等待用户输入
		fmt.Printf("第%d题：%d %s %d = ?\n", i+1, ex.num1, ex.op, ex.num2)
		fmt.Print("请输入你的答案：")

		// 读取用户输入（处理非数字输入）
		var userAns int
		_, err := fmt.Scan(&userAns)
		if err != nil {
			// 清空输入缓冲区（避免错误输入影响下一题）
			scanner.Scan()
			fmt.Println("输入错误，请输入整数！本题按错误处理。\n")
			continue
		}

		// 判断答案并反馈
		if userAns == ex.answer {
			fmt.Println("回答正确！")
			correctCount++
		} else {
			fmt.Printf("回答错误，正确答案是：%d\n", ex.answer)
		}
		fmt.Println("------------------------")
	}

	// 练习结束，显示结果
	logrus.Infof("练习结束！共50题，正确%d题，正确率：%.2f%%",
		correctCount, float64(correctCount)/50*100)
}

// 生成一道合法的算式（加法和≤100，减法差≥0）
func generateValidExercise() Exercise {
	for {
		num1 := rand.Intn(100)
		num2 := rand.Intn(100)
		opType := rand.Intn(2) // 0:加法，1:减法

		if opType == 0 {
			// 加法：确保和不超过100
			sum := num1 + num2
			if sum <= 100 {
				return Exercise{
					num1:   num1,
					num2:   num2,
					op:     "+",
					answer: sum,
				}
			}
		} else {
			// 减法：确保差≥0（被减数≥减数）
			if num1 >= num2 {
				diff := num1 - num2
				return Exercise{
					num1:   num1,
					num2:   num2,
					op:     "-",
					answer: diff,
				}
			}
		}
		// 若不合法，循环重新生成
	}
}